// 计算当前日期星座
export const getHoroscope = date => {
	let c = ['摩羯', '水瓶', '双鱼', '白羊', '金牛', '双子', '巨蟹', '狮子', '处女', '天秤', '天蝎', '射手', '摩羯']
	date = new Date(date);
	let month = date.getMonth() + 1;
	let day = date.getDate();
	let startMonth = month - (day - 14 < '865778999988'.charAt(month));
	return c[startMonth] + '座';
}
// 计算指定时间与当前的时间差
export const sumAge = data => {
	let dateBegin = new Date(data.replace(/-/g, "/"));
	let dateEnd = new Date(); //获取当前时间
	let dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
	let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
	let leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
	let hours = Math.floor(leave1 / (3600 * 1000)) //计算出小时数
	//计算相差分钟数
	let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
	let minutes = Math.floor(leave2 / (60 * 1000)) //计算相差分钟数
	//计算相差秒数
	let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
	let seconds = Math.round(leave3 / 1000)
	return dayDiff + "天 " + hours + "小时 ";
}
// 获取聊天时间（相差300s内的信息不会显示时间）
export const getChatTime = (v1, v2) => {
	v1 = v1.toString().length < 13 ? v1 * 1000 : v1;
	v2 = v2.toString().length < 13 ? v2 * 1000 : v2;
	if (((parseInt(v1) - parseInt(v2)) / 1000) > 300) {
		return getTime(v1);
	}
}

const parseNumber = num => {
	return num < 10 ? "0" + num : num;
}

const dateFormat = (date, formatStr) => {
	let dateObj = {},
		rStr = /\{([^}]+)\}/,
		mons = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'];

	dateObj["Y"] = date.getFullYear();
	dateObj["M"] = date.getMonth() + 1;
	dateObj["MM"] = parseNumber(dateObj["M"]);
	dateObj["Mon"] = mons[dateObj['M'] - 1];
	dateObj["D"] = date.getDate();
	dateObj["DD"] = parseNumber(dateObj["D"]);
	dateObj["h"] = date.getHours();
	dateObj["hh"] = parseNumber(dateObj["h"]);
	dateObj["t"] = dateObj["h"] > 12 ? dateObj["h"] - 12 : dateObj["h"];
	dateObj["tt"] = parseNumber(dateObj["t"]);
	dateObj["A"] = dateObj["h"] > 12 ? '下午' : '上午';
	dateObj["i"] = date.getMinutes();
	dateObj["ii"] = parseNumber(dateObj["i"]);
	dateObj["s"] = date.getSeconds();
	dateObj["ss"] = parseNumber(dateObj["s"]);

	while (rStr.test(formatStr)) {
		formatStr = formatStr.replace(rStr, dateObj[RegExp.$1]);
	}
	return formatStr;
}

// 时间格式化
export const getTime = timer => {
	timer = timer.toString().length < 13 ? timer * 1000 : timer;
	let current = (new Date()).getTime();
	let differ = (current - parseInt(timer)) / 1000;

	if (differ < 43200) {
		// 当天
		return dateFormat(new Date(timer), "{A} {t}:{ii}");
	} else if (differ < 518400) {
		// 隔天 显示日期+时间
		return dateFormat(new Date(timer), "{Mon}月{DD}日 {A} {t}:{ii}");
	} else {
		// 隔年 显示完整日期+时间
		return dateFormat(new Date(timer), "{Y}-{MM}-{DD} {A} {t}:{ii}");
	}
}

// 获取年龄
export const getAgeByBirthday = data => {
	let birthday = new Date(data);
	let d = new Date();
	return d.getFullYear() - birthday.getFullYear() - ((d.getMonth() < birthday.getMonth() || d.getMonth() === birthday.getMonth() &&
		d.getDate() < birthday.getDate()) ? 1 : 0);
}

// 计算糗龄
export function getDayDiff(registerAt) {
	//如果时间格式是正确的，那下面这一步转化时间格式就可以不用了
	let dateBegin = new Date(registerAt); //将-转化为/，使用new Date
	let dateEnd = new Date(); //获取当前时间
	let dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
	let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
	return dayDiff + ' 天';
}

// 格式化生日
export function birthFormat(birthday,fmt) {
	let date = new Date(birthday);
	let ret;
	const opt = {
		"Y+": date.getFullYear().toString(), // 年
		"M+": (date.getMonth() + 1).toString(), // 月
		"D+": date.getDate().toString(), // 日
		"h+": date.getHours().toString(), // 时
		"m+": date.getMinutes().toString(), // 分
		"s+": date.getSeconds().toString() // 秒
		// 有其他格式化字符需求可以继续添加，必须转化成字符串
	};
	for (let k in opt) {
		ret = new RegExp("(" + k + ")").exec(fmt);
		if (ret) {
			fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
		};
	};
	return fmt;
}
